<?php

namespace common\components;


use yii\base\Component;

class ZipArchive extends Component
{


    /**
     * @param $zipfile
     * @param $file
     * @return bool
     * 将文件压缩成zip文件
     */
    public static function file2zip($zipfile,$file)
    {
        $zip=new ZipArchive;

        if($zip->open($zipfile,ZipArchive::OVERWRITE)===TRUE){
            $zip->addFile($file);//假设加入的文件名是image.txt，在当前路径下
            $zip->close();
            return $zipfile;
        }

        return false;
    }


    /**
     * @param $zipfile
     * @param $file
     * @param $content
     * @return bool
     * 文件追加内容添加到zip文件
     */
    public static function fileAppendZip($zipfile,$file,$content)
    {
        $zip=new ZipArchive;
        $res=$zip->open($zipfile,ZipArchive::CREATE);
        if($res===TRUE){
            $zip->addFromString($file,$content);
            $zip->close();
            return true;
        }else{
            echo false;
        }
    }


    /**
     * @param $zipfile
     * @param $filepath
     * @return bool
     * 解压缩zip文件
     */
    public static function zip2file($zipfile,$filepath)
    {
        $zip = new ZipArchive;//新建一个ZipArchive的对象
        if($zip->open($zipfile)===TRUE){
            $zip->extractTo($filepath);//假设解压缩到在当前路径下images文件夹内
            $zip->close();//关闭处理的zip文件
            return true;
        }
        return false;
    }


    /**
     * @param $path
     * @param $zipfile
     * @return bool
     * 将文件夹打包成zip文件
     */
    public static function dir2zip($path,$zipfile)
    {
        $zip = new ZipArchive();
        if($zip->open($zipfile, ZipArchive::OVERWRITE)=== TRUE){
            $handler=opendir($path); //打开当前文件夹由$path指定。
            while(($filename=readdir($handler))!==false) {
                if ($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’，不要对他们进行操作
                    if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹，则递归
                        self::dir2zip($path . "/" . $filename, $zip);
                    } else { //将文件加入zip对象
                        $zip->addFile($path . "/" . $filename);
                    }
                }
            }
            return true;
        }

        return false;

    }










}
